/* 
 * File:   Matrices.h
 * Author: bastian
 *
 * Created on 7 de mayo de 2011, 17:50
 */

#ifndef STDIO_H
#include <stdio.h>
#define STDIO_H
#endif

#ifndef STDLIB_H
#include <stdlib.h>
#define STDLIB_H
#endif

#ifndef MATH_H
#include <math.h>
#define MATH_H
#endif

#ifndef FRACCIONES_H
#include "Fracciones.h"
#define FRACCIONES_H
#endif

typedef struct{

    int filas;
    int columnas;
    Fraccion **elementos;
}Matriz;

/*Columnas --> i
 Filas --> j
 */

Matriz *Matriz_new(int fil,int col){

    
    //printf("\nfila,columna ---> %i,%i\n",fil,col);
    // comprobar que fil y col sean > 1
    Matriz *mat = (Matriz *) malloc (sizeof(Matriz));
    
    mat->elementos = (Fraccion **) malloc(fil*sizeof(Fraccion));
   
    
    for(int i = 0 ; i< fil; i++)
                mat->elementos[i]=(Fraccion *) malloc(col *sizeof(Fraccion));
    
     
    mat->filas = fil;
    mat->columnas = col;
    
    
    
    return mat;
}

Matriz  *Matriz_Identidad(int filas){

    Matriz *mat = Matriz_new(filas,filas);
    if(mat->filas==mat->columnas){
        for(int i=0; i < mat->filas; i++)
            Fraccion_setValue(&mat->elementos[i][i],1,1);            
    }
    
    return mat;
}

void Matriz_Nula(Matriz * mat){

    for(int i = 0 ; i< mat->filas; i++){
        for(int j = 0; j< mat->columnas; j++)
            Fraccion_setValue(&mat->elementos[i][j],0,1);
    }

}

void Matriz_Mostrar(Matriz *mat){
    for(int i= 0; i< mat->filas;i++){
        for(int j=0; j< mat->columnas; j++){
            Fraccion_Mostrar(&mat->elementos[i][j]);
            printf(" ");
        }
        getchar();
        printf("\n");
    }
}

Matriz *Matriz_Traspuesta(Matriz *m){

    Matriz *tras = Matriz_new(m->columnas,m->filas);
    
    for(int i =0; i> tras->filas; i++){
        for(int j =0; j> tras->columnas; j++)
            tras->elementos[i][j]=m->elementos[j][i];
    }
    
    return tras;
}
